import request from '@/utils/request'

/**
 * 计费管理API
 */
export const BillingAPI = {
  /**
   * 根据设备抄表数据生成账单
   * @param {Object} params
   * @param {number} params.customerId - 客户ID
   * @param {string} params.billingPeriod - 计费周期(格式: yyyy-MM)
   */
  generateBillFromDevices(params) {
    return request({
      url: '/admin/bill/generate',
      method: 'post',
      params
    })
  },

  /**
   * 计算设备用水量和费用
   * @param {number} deviceId - 设备ID
   * @param {string} billingPeriod - 计费周期
   */
  calculateDeviceUsage(deviceId, billingPeriod) {
    return request({
      url: `/admin/bill/device/${deviceId}/usage`,
      method: 'get',
      params: { billingPeriod }
    })
  },

  /**
   * 获取客户设备计费信息
   * @param {number} customerId - 客户ID
   * @param {string} billingPeriod - 计费周期
   */
  getCustomerBilling(customerId, billingPeriod) {
    return request({
      url: `/admin/bill/customer/${customerId}/billing`,
      method: 'get',
      params: { billingPeriod }
    })
  },

  /**
   * 更新区域水费单价
   * @param {number} areaId - 区域ID
   * @param {number} waterPrice - 水费单价
   */
  updateAreaWaterPrice(areaId, waterPrice) {
    return request({
      url: `/admin/area/${areaId}/waterPrice`,
      method: 'put',
      params: { waterPrice }
    })
  },

  /**
   * 更新设备抄表读数
   * @param {number} deviceId - 设备ID
   * @param {number} currentReading - 当前抄表读数
   * @param {string} billingPeriod - 计费周期(可选)
   */
  updateDeviceMeterReading(deviceId, currentReading, billingPeriod) {
    const params = { currentReading }
    if (billingPeriod) {
      params.billingPeriod = billingPeriod
    }
    return request({
      url: `/admin/device/${deviceId}/meterReading`,
      method: 'put',
      params
    })
  },

  /**
   * 获取设备计费汇总信息
   * @param {Object} params - 查询参数
   */
  getDeviceBillingSummary(params) {
    return request({
      url: '/admin/device/billing/summary',
      method: 'get',
      params
    })
  },

  /**
   * 获取设备列表（用于计费管理）
   * @param {Object} params - 查询参数
   */
  getDeviceList(params) {
    return request({
      url: '/admin/device/page',
      method: 'get',
      params
    })
  }
} 